﻿using Onshi.POS.Modelo.Entidades;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.AccesoDatos;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Onshi.POS.Modelo.Entidades.Tipos;

namespace Onshi.POS.Repositorios
{
    public class RepositorioArticulos : RepositorioEntidad<Articulo, Int32, IServicioDatosArticulos>
    {
        #region Constructores

        public RepositorioArticulos()
            : base()
        {
        }

        #endregion

        #region Atributos

        private RepositorioTiposComisionesArticulos repositorioTiposComisionesArticulos = new RepositorioTiposComisionesArticulos();
        private RepositorioTiposImpuestosArticulos repositorioTiposImpuestosArticulos = new RepositorioTiposImpuestosArticulos();
        private RepositorioTiposCostosArticulos repositorioTiposCostosArticulos = new RepositorioTiposCostosArticulos();
        private RepositorioTiposArticulos repositorioTiposArticulos = new RepositorioTiposArticulos();
        private RepositorioDescuentosRecargosFechasHoras repositorioDescuentosRecargosFechasHoras = new RepositorioDescuentosRecargosFechasHoras();
        private RepositorioMarcas repositorioMarcas = new RepositorioMarcas();
        private RepositorioDescuentosRecargosCantidades repositorioDescuentosRecargosCantidades = new RepositorioDescuentosRecargosCantidades();
        private RepositorioSubRubrosArticulos repositorioSubRubrosArticulos = new RepositorioSubRubrosArticulos();
        private RepositorioCamposPersonalizadosArticulos repositorioCamposPersonalizadosArticulos = new RepositorioCamposPersonalizadosArticulos();
        private RepositorioListasPreciosVentas repositorioListasPreciosVentas = new RepositorioListasPreciosVentas();
        private RepositorioListasPreciosCompras repositorioListasPreciosCompras = new RepositorioListasPreciosCompras();
        private RepositorioUbicaciones repositorioUbicaciones = new RepositorioUbicaciones();
        private RepositorioProveedores repositorioProveedores = new RepositorioProveedores();

        #endregion

        #region Metodos

        public override Articulo DevolverPorId(Int32 id)
        {
            return DevolverPorId(id, false);
        }

        public Articulo DevolverPorCodigo(String codigo)
        {
            return DevolverPorCodigo(codigo, false);
        }

        public List<Articulo> DevolverTodos()
        {
            return DevolverTodos(false);
        }

        public Articulo DevolverPorId(Int32 id, Boolean incluirImagen)
        {
            var articulo = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (articulo == null)
                using (var ds = servicioDatos.Articulos_DevolverPorId(id, incluirImagen))
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        articulo = FilaAEntidad(ds.Tables[0].Rows[0]);
                        articulo.ListasPreciosVentas = TablaAListaListasPreciosVentas(ds.Tables[1]);
                        foreach (var item in articulo.ListasPreciosVentas)
                            item.Articulo = articulo;
                        articulo.ListasPreciosCompras = TablaAListaListasPreciosCompras(ds.Tables[2]);
                        articulo.CamposPersonalizados = TablaAListaCamposPersonalizados(ds.Tables[3]);
                        articulo.Variantes = TablaAListaVariantes(ds.Tables[4]);
                        foreach (var variante in articulo.Variantes)
                        {
                            var variantesDetalles = ds.Tables[5].AsEnumerable().Where(x => (Int32)x["IdArticuloVariante"] == variante.Id).AsDataView().ToTable();
                            variante.Valores = TablaAListaVariantesDetalles(variantesDetalles);
                            foreach (var valor in variante.Valores)
                                valor.Variante = variante;
                        }
                        articulo.Existencias = TablaAListaExistencias(ds.Tables[6]);
                        foreach (var existencia in articulo.Existencias)
                        {
                            existencia.VariantesDetalles = new List<ArticuloVarianteDetalle>();
                            var existenciasDetalles = ds.Tables[7].AsEnumerable().Where(x => (Int32)x["IdArticuloExistencia"] == existencia.Id).AsDataView().ToTable();
                            foreach (DataRow item in existenciasDetalles.Rows)
                                foreach (var variante in articulo.Variantes)
                                {
                                    var varianteDetalle = variante.Valores.SingleOrDefault(x => x.Id == (Int32)item["IdArticuloVarianteDetalle"]);
                                    if (varianteDetalle != null)
                                    {
                                        existencia.VariantesDetalles.Add(varianteDetalle);
                                        break;
                                    }
                                }
                        }
                        articulo.Proveedores = TablaAListaProveedores(ds.Tables[8]);
                        articulo.ArticulosCompuestos = TablaAListaArticulosCompuestos(ds.Tables[9]);
                        entidades.Add(articulo);
                    }
            return articulo;
        }

        public Articulo DevolverPorCodigo(String codigo, Boolean incluirImagen)
        {
            var articulo = entidades.Where(x => x.Codigo == codigo).FirstOrDefault();
            if (articulo == null)
                using (var ds = servicioDatos.Articulos_DevolverPorCodigo(codigo, incluirImagen))
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        articulo = FilaAEntidad(ds.Tables[0].Rows[0]);
                        articulo.ListasPreciosVentas = TablaAListaListasPreciosVentas(ds.Tables[1]);
                        foreach (var item in articulo.ListasPreciosVentas)
                            item.Articulo = articulo;
                        articulo.ListasPreciosCompras = TablaAListaListasPreciosCompras(ds.Tables[2]);
                        articulo.CamposPersonalizados = TablaAListaCamposPersonalizados(ds.Tables[3]);
                        articulo.Variantes = TablaAListaVariantes(ds.Tables[4]);
                        foreach (var variante in articulo.Variantes)
                        {
                            var variantesDetalles = ds.Tables[5].AsEnumerable().Where(x => (Int32)x["IdArticuloVariante"] == variante.Id).AsDataView().ToTable();
                            variante.Valores = TablaAListaVariantesDetalles(variantesDetalles);
                            foreach (var valor in variante.Valores)
                                valor.Variante = variante;
                        }
                        articulo.Existencias = TablaAListaExistencias(ds.Tables[6]);
                        foreach (var existencia in articulo.Existencias)
                        {
                            existencia.VariantesDetalles = new List<ArticuloVarianteDetalle>();
                            var existenciasDetalles = ds.Tables[7].AsEnumerable().Where(x => (Int32)x["IdArticuloExistencia"] == existencia.Id).AsDataView().ToTable();
                            foreach (DataRow item in existenciasDetalles.Rows)
                                foreach (var variante in articulo.Variantes)
                                {
                                    var varianteDetalle = variante.Valores.SingleOrDefault(x => x.Id == (Int32)item["IdArticuloVarianteDetalle"]);
                                    if (varianteDetalle != null)
                                    {
                                        existencia.VariantesDetalles.Add(varianteDetalle);
                                        break;
                                    }
                                }
                        }
                        articulo.Proveedores = TablaAListaProveedores(ds.Tables[8]);
                        articulo.ArticulosCompuestos = TablaAListaArticulosCompuestos(ds.Tables[9]);
                        entidades.Add(articulo);
                    }
            return articulo;
        }

        public List<Articulo> DevolverTodos(Boolean incluirImagen)
        {
            using (var ds = servicioDatos.Articulos_DevolverTodos(incluirImagen))
            {
                entidades = TablaALista(ds.Tables[0]);
                foreach (var articulo in entidades)
                {
                    var listasPreciosVentas = ds.Tables[1].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.ListasPreciosVentas = TablaAListaListasPreciosVentas(listasPreciosVentas);
                    foreach (var item in articulo.ListasPreciosVentas)
                        item.Articulo = articulo;
                    var listasPreciosCompras = ds.Tables[2].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.ListasPreciosCompras = TablaAListaListasPreciosCompras(listasPreciosCompras);
                    var camposPersonalizados = ds.Tables[3].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.CamposPersonalizados = TablaAListaCamposPersonalizados(camposPersonalizados);
                    var variantes = ds.Tables[4].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.Variantes = TablaAListaVariantes(variantes);
                    foreach (var variante in articulo.Variantes)
                    {
                        var variantesDetalles = ds.Tables[5].AsEnumerable().Where(x => (Int32)x["IdArticuloVariante"] == variante.Id).AsDataView().ToTable();
                        variante.Valores = TablaAListaVariantesDetalles(variantesDetalles);
                        foreach (var valor in variante.Valores)
                            valor.Variante = variante;
                    }
                    var existencias = ds.Tables[6].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.Existencias = TablaAListaExistencias(existencias);
                    foreach (var existencia in articulo.Existencias)
                    {
                        existencia.VariantesDetalles = new List<ArticuloVarianteDetalle>();
                        var existenciasDetalles = ds.Tables[7].AsEnumerable().Where(x => (Int32)x["IdArticuloExistencia"] == existencia.Id).AsDataView().ToTable();
                        foreach (DataRow item in existenciasDetalles.Rows)
                            foreach (var variante in articulo.Variantes)
                            {
                                var varianteDetalle = variante.Valores.SingleOrDefault(x => x.Id == (Int32)item["IdArticuloVarianteDetalle"]);
                                if (varianteDetalle != null)
                                {
                                    existencia.VariantesDetalles.Add(varianteDetalle);
                                    break;
                                }
                            }
                    }
                    var proveedores = ds.Tables[8].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.Proveedores = TablaAListaProveedores(proveedores);
                    var articulos = ds.Tables[9].AsEnumerable().Where(x => (Int32)x["IdArticulo"] == articulo.Id).AsDataView().ToTable();
                    articulo.ArticulosCompuestos = TablaAListaArticulosCompuestos(articulos);
                }
            }
            return entidades;
        }

        private ArticuloListaPrecioCompra FilaAListaPrecioCompra(DataRow fila)
        {
            var listaPrecioCompra = new ArticuloListaPrecioCompra();
            listaPrecioCompra.Valor = (Decimal)fila["Valor"];
            listaPrecioCompra.Entidad = repositorioListasPreciosCompras.DevolverPorId((Int32)fila["IdListaPrecioCompra"]);
            return listaPrecioCompra;
        }

        private ArticuloListaPrecioVenta FilaAListaPrecioVenta(DataRow fila)
        {
            var listaPrecioVenta = new ArticuloListaPrecioVenta();
            listaPrecioVenta.Valor = (Decimal)fila["Valor"];
            listaPrecioVenta.Entidad = repositorioListasPreciosVentas.DevolverPorId((Int32)fila["IdListaPrecioVenta"]);
            return listaPrecioVenta;
        }

        private ArticuloCampoPersonalizadoArticulo FilaACampoPersonalizado(DataRow fila)
        {
            var campoPersonalizado = new ArticuloCampoPersonalizadoArticulo();
            campoPersonalizado.Valor = (String)fila["Valor"];
            campoPersonalizado.Entidad = repositorioCamposPersonalizadosArticulos.DevolverPorId((Int32)fila["IdCampoPersonalizadoArticulo"]);
            return campoPersonalizado;
        }

        private List<Proveedor> TablaAListaProveedores(DataTable tabla)
        {
            var proveedores = new List<Proveedor>();
            foreach (DataRow fila in tabla.Rows)
                proveedores.Add(repositorioProveedores.DevolverPorId((Int32)fila["IdProveedor"]));
            return proveedores;
        }

        private ArticuloCompuesto FilaAArticuloCompuesto(DataRow fila)
        {
            var articuloCompuesto = new ArticuloCompuesto();
            articuloCompuesto.Id = (Int32)fila["IdArticuloCompuesto"];
            articuloCompuesto.Valor = (Int32)fila["Cantidad"];
            articuloCompuesto.Entidad = DevolverPorId((Int32)fila["IdArticuloDetalle"]);
            return articuloCompuesto;
        }

        private List<ArticuloCompuesto> TablaAListaArticulosCompuestos(DataTable tabla)
        {
            var articulosCompuestos = new List<ArticuloCompuesto>();
            foreach (DataRow fila in tabla.Rows)
                articulosCompuestos.Add(FilaAArticuloCompuesto(fila));
            return articulosCompuestos;
        }

        private List<ArticuloListaPrecioVenta> TablaAListaListasPreciosVentas(DataTable tabla)
        {
            var listasPreciosVentas = repositorioListasPreciosVentas.DevolverTodos();
            var articulosListasPreciosVentas = new List<ArticuloListaPrecioVenta>();
            foreach (DataRow fila in tabla.Rows)
                articulosListasPreciosVentas.Add(FilaAListaPrecioVenta(fila));
            foreach (var item in listasPreciosVentas)
                if (!articulosListasPreciosVentas.Exists(x => x.Entidad.Id == item.Id))
                    articulosListasPreciosVentas.Add(new ArticuloListaPrecioVenta()
                    {
                        Entidad = item,
                        Valor = 0
                    });
            return articulosListasPreciosVentas.OrderBy(x => x.Entidad.Id).ToList();
        }

        private List<ArticuloListaPrecioCompra> TablaAListaListasPreciosCompras(DataTable tabla)
        {
            var listasPreciosCompras = repositorioListasPreciosCompras.DevolverTodos();
            var articulosListasPreciosCompras = new List<ArticuloListaPrecioCompra>();
            foreach (DataRow fila in tabla.Rows)
                articulosListasPreciosCompras.Add(FilaAListaPrecioCompra(fila));
            foreach (var item in listasPreciosCompras)
                if (!articulosListasPreciosCompras.Exists(x => x.Entidad.Id == item.Id))
                    articulosListasPreciosCompras.Add(new ArticuloListaPrecioCompra()
                    {
                        Entidad = item,
                        Valor = 0
                    });
            return articulosListasPreciosCompras.OrderBy(x => x.Entidad.Id).ToList();
        }

        private List<ArticuloCampoPersonalizadoArticulo> TablaAListaCamposPersonalizados(DataTable tabla)
        {
            var camposPersonalizadosArticulos = repositorioCamposPersonalizadosArticulos.DevolverTodos();
            var articulosCamposPersonalizadosArticulos = new List<ArticuloCampoPersonalizadoArticulo>();
            foreach (DataRow fila in tabla.Rows)
                articulosCamposPersonalizadosArticulos.Add(FilaACampoPersonalizado(fila));
            foreach (var item in camposPersonalizadosArticulos)
                if (!articulosCamposPersonalizadosArticulos.Exists(x => x.Entidad.Id == item.Id))
                    articulosCamposPersonalizadosArticulos.Add(new ArticuloCampoPersonalizadoArticulo()
                    {
                        Entidad = item,
                        Valor = String.Empty
                    });
            return articulosCamposPersonalizadosArticulos;
        }

        private List<ArticuloVariante> TablaAListaVariantes(DataTable tabla)
        {
            var variantes = new List<ArticuloVariante>();
            foreach (DataRow fila in tabla.Rows)
                variantes.Add(FilaAVariante(fila));
            return variantes;
        }

        private List<ArticuloVarianteDetalle> TablaAListaVariantesDetalles(DataTable tabla)
        {
            var variantesDetalles = new List<ArticuloVarianteDetalle>();
            foreach (DataRow fila in tabla.Rows)
                variantesDetalles.Add(FilaAVarianteDetalle(fila));
            return variantesDetalles;
        }

        private ArticuloVarianteDetalle FilaAVarianteDetalle(DataRow fila)
        {
            var varianteDetalle = new ArticuloVarianteDetalle();
            varianteDetalle.Id = (Int32)fila["IdArticuloVarianteDetalle"];
            varianteDetalle.Valor = (String)fila["Valor"];
            return varianteDetalle;
        }

        private ArticuloVariante FilaAVariante(DataRow fila)
        {
            var variante = new ArticuloVariante();
            variante.Id = (Int32)fila["IdArticuloVariante"];
            variante.Nombre = (String)fila["Nombre"];
            variante.EstaEliminado = (Boolean)fila["EstaEliminado"];
            return variante;
        }

        private ArticuloExistencia FilaAExistencia(DataRow fila)
        {
            var existencia = new ArticuloExistencia();
            existencia.Id = (Int32)fila["IdArticuloExistencia"];
            existencia.Cantidad = (Int32)fila["Cantidad"];
            existencia.EstaEliminado = (Boolean)fila["EstaEliminado"];
            existencia.Ubicacion = repositorioUbicaciones.DevolverPorId((Int32)fila["IdUbicacion"]);
            return existencia;
        }

        private List<ArticuloExistencia> TablaAListaExistencias(DataTable tabla)
        {
            var existencias = new List<ArticuloExistencia>();
            foreach (DataRow fila in tabla.Rows)
                existencias.Add(FilaAExistencia(fila));
            return existencias;
        }

        public void Insertar(Articulo articulo)
        {
            articulo.Id = servicioDatos.Articulos_Insertar(articulo.Tipo.Id, articulo.SubRubro.Id, articulo.Marca.Id, articulo.DescuentoRecargoCantidad.Id, articulo.TipoComision.Id, articulo.TipoImpuesto.Id, articulo.TipoCosto.Id, articulo.DescuentoRecargoFechaHora.Id, articulo.Codigo, articulo.Nombre, articulo.ExistenciaMinima, articulo.ExistenciaMaxima, articulo.Costo, articulo.Comision, articulo.ComisionMaxima, articulo.Iva, articulo.Impuesto, articulo.Observaciones, articulo.Imagen, articulo.CodigoBarras);
        }

        public void Modificar(Articulo articulo)
        {
            servicioDatos.Articulos_Modificar(articulo.Id, articulo.Tipo.Id, articulo.SubRubro.Id, articulo.Marca.Id, articulo.DescuentoRecargoCantidad.Id, articulo.TipoComision.Id, articulo.TipoImpuesto.Id, articulo.TipoCosto.Id, articulo.DescuentoRecargoFechaHora.Id, articulo.Codigo, articulo.Nombre, articulo.ExistenciaMinima, articulo.ExistenciaMaxima, articulo.Costo, articulo.Comision, articulo.ComisionMaxima, articulo.Iva, articulo.Impuesto, articulo.Observaciones, articulo.Imagen, articulo.EstaEliminado, articulo.CodigoBarras);
        }

        public void EliminarProveedoresPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosProveedores_EliminarPorArticulo(articulo.Id);
        }

        public void InsertarProveedor(Articulo articulo, Proveedor proveedor)
        {
            servicioDatos.ArticulosProveedores_Insertar(articulo.Id, proveedor.Id);
        }

        public void EliminarVariantesPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosVariantes_EliminarPorArticulo(articulo.Id);
        }

        public void EliminarExistenciasPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosExistencias_EliminarPorArticulo(articulo.Id);
        }

        public void EliminarExistenciasPorUbicacion(Ubicacion ubicacion)
        {
            servicioDatos.ArticulosExistencias_EliminarPorUbicacion(ubicacion.Id);
        }

        public void InsertarExistencia(Articulo articulo, ArticuloExistencia existencia)
        {
            existencia.Id = servicioDatos.ArticulosExistencias_Insertar(articulo.Id, existencia.Ubicacion.Id, existencia.Cantidad);
        }

        public void InsertarVariante(Articulo articulo, ArticuloVariante variante)
        {
            variante.Id = servicioDatos.ArticulosVariantes_Insertar(articulo.Id, variante.Nombre);
        }

        public void InsertarVarianteDetalle(ArticuloVariante variante, ArticuloVarianteDetalle varianteDetalle)
        {
            varianteDetalle.Id = servicioDatos.ArticulosVariantesDetalles_Insertar(variante.Id, varianteDetalle.Valor);
        }

        public void InsertarExistenciaDetalle(ArticuloExistencia existencia, ArticuloVarianteDetalle varianteDetalle)
        {
            servicioDatos.ArticulosExistenciasDetalles_Insertar(existencia.Id, varianteDetalle.Id);
        }

        public void EliminarListasPreciosVentasPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosListasPreciosVentas_EliminarPorArticulo(articulo.Id);
        }

        public void InsertarListaPrecioVenta(Articulo articulo, ArticuloListaPrecioVenta listaPrecio)
        {
            servicioDatos.ArticulosListasPreciosVentas_Insertar(articulo.Id, listaPrecio.Entidad.Id, listaPrecio.Valor);
        }

        public void EliminarListasPreciosComprasPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosListasPreciosCompras_EliminarPorArticulo(articulo.Id);
        }

        public void InsertarListaPrecioCompra(Articulo articulo, ArticuloListaPrecioCompra listaPrecio)
        {
            servicioDatos.ArticulosListasPreciosCompras_Insertar(articulo.Id, listaPrecio.Entidad.Id, listaPrecio.Valor);
        }

        public void EliminarCamposPersonalizadosPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosCamposPersonalizadosArticulos_EliminarPorArticulo(articulo.Id);
        }

        public void InsertarCampoPersonalizado(Articulo articulo, ArticuloCampoPersonalizadoArticulo campoPersonalizado)
        {
            servicioDatos.ArticulosCamposPersonalizadosArticulos_Insertar(articulo.Id, campoPersonalizado.Entidad.Id, campoPersonalizado.Valor);
        }

        protected override Articulo FilaAEntidad(DataRow fila)
        {
            var articulo = new Articulo();
            articulo.Id = (Int32)fila["IdArticulo"];
            articulo.Codigo = (String)fila["Codigo"];
            articulo.Nombre = (String)fila["Nombre"];
            articulo.ExistenciaMinima = (Int32)fila["ExistenciaMinima"];
            articulo.ExistenciaMaxima = (Int32)fila["ExistenciaMaxima"];
            articulo.Costo = (Decimal)fila["Costo"];
            articulo.Comision = (Decimal)fila["Comision"];
            articulo.ComisionMaxima = (Decimal)fila["ComisionMaxima"];
            articulo.Iva = (Decimal)fila["Iva"];
            articulo.Impuesto = (Decimal)fila["Impuesto"];
            articulo.Observaciones = (String)fila["Observaciones"];
            if (fila["Imagen"] != DBNull.Value)
                articulo.Imagen = (Byte[])fila["Imagen"];
            articulo.EstaEliminado = (Boolean)fila["EstaEliminado"];
            articulo.CodigoBarras = (String)fila["CodigoBarras"];
            articulo.SubRubro = repositorioSubRubrosArticulos.DevolverPorId((Int32)fila["IdSubRubroArticulo"]);
            articulo.DescuentoRecargoCantidad = repositorioDescuentosRecargosCantidades.DevolverPorId((Int32)fila["IdDescuentoRecargoCantidad"]);
            articulo.Marca = repositorioMarcas.DevolverPorId((Int32)fila["IdMarca"]);
            articulo.DescuentoRecargoFechaHora = repositorioDescuentosRecargosFechasHoras.DevolverPorId((Int32)fila["IdDescuentoRecargoFechaHora"]);
            articulo.Tipo = repositorioTiposArticulos.DevolverPorId((Byte)fila["IdTipoArticulo"]);
            articulo.TipoComision = repositorioTiposComisionesArticulos.DevolverPorId((Byte)fila["IdTipoComisionArticulo"]);
            articulo.TipoImpuesto = repositorioTiposImpuestosArticulos.DevolverPorId((Byte)fila["IdTipoImpuestoArticulo"]);
            articulo.TipoCosto = repositorioTiposCostosArticulos.DevolverPorId((Byte)fila["IdTipoCostoArticulo"]);
            return articulo;
        }

        public void EliminarArticulosCompuestosPorArticulo(Articulo articulo)
        {
            servicioDatos.ArticulosCompuestos_EliminarPorArticulo(articulo.Id);
        }

        public void InsertarArticulosCompuestos(Articulo articulo, ArticuloCompuesto articuloCompuesto)
        {
            servicioDatos.ArticulosCompuestos_Insertar(articulo.Id, articuloCompuesto.Entidad.Id, articuloCompuesto.Valor);
        }

        public void ModificarSubRubroArticulo(SubRubroArticulo subRubroNuevo, SubRubroArticulo subRubroViejo)
        {
            servicioDatos.Articulos_ModificarSubRubroArticulo(subRubroNuevo.Id, subRubroViejo.Id);
        }

        public void ModificarMarca(Marca marcaNuevo, Marca marcaViejo)
        {
            servicioDatos.Articulos_ModificarMarca(marcaNuevo.Id, marcaViejo.Id);
        }

        public void ModificarDescuentoRecargoFechaHora(DescuentoRecargoFechaHora descuentoRecargoFechaHoraNuevo, DescuentoRecargoFechaHora descuentoRecargoFechaHoraViejo)
        {
            servicioDatos.Articulos_ModificarDescuentoRecargoFechaHora(descuentoRecargoFechaHoraNuevo.Id, descuentoRecargoFechaHoraViejo.Id);
        }

        public void ModificarDescuentoRecargoCantidad(DescuentoRecargoCantidad descuentoRecargoCantidadNuevo, DescuentoRecargoCantidad descuentoRecargoCantidadViejo)
        {
            servicioDatos.Articulos_ModificarDescuentoRecargoCantidad(descuentoRecargoCantidadNuevo.Id, descuentoRecargoCantidadViejo.Id);
        }

        public void EliminarCamposPersonalizadosPorCampoPersonalizado(CampoPersonalizadoArticulo campoPersonalizadoArticulo)
        {
            servicioDatos.ArticulosCamposPersonalizadosArticulos_EliminarPorCampoPersonalizadoArticulo(campoPersonalizadoArticulo.Id);
        }

        public void EliminarListasPreciosVentasPorListaPrecioVenta(ListaPrecioVenta listaPrecioVenta)
        {
            servicioDatos.ArticulosListasPreciosVentas_EliminarPorListaPrecioVenta(listaPrecioVenta.Id);
        }

        public void EliminarListasPreciosComprasPorListaPrecioCompra(ListaPrecioCompra listaPrecioCompra)
        {
            servicioDatos.ArticulosListasPreciosCompras_EliminarPorListaPrecioCompra(listaPrecioCompra.Id);
        }

        #endregion
    }
}
